package service.locaveis;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.TypedQuery;

import model.Categoria;
import model.locaveis.Livro;
import service.GenericDAOImpl;

public class LivroDAO extends GenericDAOImpl<Livro> {
	
	public LivroDAO(EntityManager em) {
		super.entityManager = em;
	}
	
	public Livro criaLivro(Categoria categoria, String nome, String isbn,
			String autor, int numeroPaginas, ArrayList<String> palavrasChave, 
			byte[] fotoCapa, int totalUnidades) {
		Livro livro = new Livro();
		livro.setIsbn(isbn);
		livro.setAutor(autor);
		livro.setFotoCapa(fotoCapa);
		livro.setCategoria(categoria);
		livro.setNome(nome);
		livro.setNumeroPaginas(numeroPaginas);
		livro.setPalavrasChave(palavrasChave);
		livro.setTotalUnidades(totalUnidades);
		
		insereObjeto(livro);
		
		return livro;
	}

	@Override
	public Livro localizaObjeto(Long objId) {
		Livro obj = entityManager.getReference(
				Livro.class, objId);
		return obj;
	}

	@Override
	public List<Livro> listaObjetos() {
		TypedQuery<Livro> query = entityManager.createQuery(
				"SELECT e FROM Livro e", Livro.class);
		return query.getResultList();
	}

	@Override
	public void deletaObjetos() {
		TypedQuery<Livro> query = entityManager.createQuery(
				"DELETE FROM Livro", Livro.class);
		query.executeUpdate();
		
	}

	public boolean verificaDisponibilidade(Long objId) {
		Livro livro = localizaObjeto(objId);
		if(livro != null && livro.getTotalLocados() < livro.getTotalUnidades()) {
			return true;
		}
		return false;
	}

}
